Add another constraints demo
authorMatthias Clasen <mclasen@redhat.com>
Fri, 30 Oct 2020 04:22:47 +0000 (00:22 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 30 Oct 2020 19:04:13 +0000 (15:04 -0400)
This one attempts to use constraints in a ui file.
It doesn't work.

demos/gtk-demo/constraints.ui [new file with mode: 0644]
demos/gtk-demo/constraints4.c [new file with mode: 0644]
demos/gtk-demo/demo.gresource.xml
demos/gtk-demo/meson.build

diff --git a/demos/gtk-demo/constraints.ui b/demos/gtk-demo/constraints.ui
new file mode 100644 (file)
index 0000000..37a58ba
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <object class="GtkWindow" id="window1">
+    <property name="title" translatable="yes">Constraints</property>
+    <child>
+      <object class="ConstraintsGrid">
+        <property name="layout-manager">
+          <object class="GtkConstraintLayout">
+            <constraints>
+              <guide name="space"
+                     min-width="10" min-height="10"
+                     nat-width="100" nat-height="10"
+                     max-width="200" max-height="20"
+                     strength="strong"/>
+              <constraint target="button1" target-attribute="start"
+                          relation="ge"
+                          constant="0"
+                          strength="required"/>
+              <constraint target="button1" target-attribute="top"
+                          relation="ge"
+                          constant="0"
+                          strength="required"/>
+              <constraint target="button1" target-attribute="width"
+                          relation="le"
+                          constant="200"
+                          strength="required"/>
+              <constraint target="super" target-attribute="start"
+                          relation="eq"
+                          source="button1" source-attribute="start"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="button1" target-attribute="width"
+                          relation="eq"
+                          source="button2" source-attribute="width"
+                          strength="required"/>
+              <constraint target="button1" target-attribute="end"
+                          relation="eq"
+                          source="space" source-attribute="start"
+                          strength="required"/>
+              <constraint target="space" target-attribute="end"
+                          relation="eq"
+                          source="button2" source-attribute="start"
+                          strength="required"/>
+              <constraint target="button2" target-attribute="end"
+                          relation="eq"
+                          source="super" source-attribute="end"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="super" target-attribute="start"
+                          relation="eq"
+                          source="button3" source-attribute="start"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="button3" target-attribute="end"
+                          relation="eq"
+                          source="super" source-attribute="end"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="super" target-attribute="top"
+                          relation="eq"
+                          source="button1" source-attribute="top"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="super" target-attribute="top"
+                          relation="eq"
+                          source="button2" source-attribute="top"
+                          constant="-8"
+                          strength="required"/>
+              <constraint target="button1" target-attribute="bottom"
+                          relation="eq"
+                          source="button3" source-attribute="top"
+                          constant="-12"
+                          strength="required"/>
+              <constraint target="button2" target-attribute="bottom"
+                          relation="eq"
+                          source="button3" source-attribute="top"
+                          constant="-12"
+                          strength="required"/>
+              <constraint target="button3" target-attribute="height"
+                          relation="eq"
+                          source="button1" source-attribute="height"
+                          strength="required"/>
+              <constraint target="button3" target-attribute="height"
+                          relation="eq"
+                          source="button2" source-attribute="height"
+                          strength="required"/>
+              <constraint target="button3" target-attribute="bottom"
+                          relation="eq"
+                          source="super" source-attribute="bottom"
+                          constant="-8"
+                          strength="required"/>
+            </constraints>
+          </object>
+        </property>
+        <child>
+          <object class="GtkButton" id="button1">
+            <property name="label">Child 1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="button2">
+            <property name="label">Child 2</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="button3">
+            <property name="label">Child 3</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/demos/gtk-demo/constraints4.c b/demos/gtk-demo/constraints4.c
new file mode 100644 (file)
index 0000000..8bde6af
--- /dev/null
@@ -0,0 +1,57 @@
+/* Constraints/Builder
+ *
+ * GtkConstraintLayouts can be created in .ui files, and
+ * constraints can be set up at that time as well, as this
+ * example demonstrates.
+ */
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+G_DECLARE_FINAL_TYPE (ConstraintsGrid, constraints_grid, CONSTRAINTS, GRID, GtkWidget)
+
+struct _ConstraintsGrid
+{
+  GtkWidget parent_instance;
+};
+
+G_DEFINE_TYPE (ConstraintsGrid, constraints_grid, GTK_TYPE_WIDGET)
+
+static void
+constraints_grid_init (ConstraintsGrid *grid)
+{
+}
+
+static void
+constraints_grid_class_init (ConstraintsGridClass *klass)
+{
+}
+
+GtkWidget *
+do_constraints4 (GtkWidget *do_widget)
+{
+ static GtkWidget *window;
+
+ if (!window)
+   {
+     GtkBuilder *builder;
+
+     g_type_ensure (constraints_grid_get_type ());
+
+     builder = gtk_builder_new_from_resource ("/constraints4/constraints.ui");
+
+     window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
+     gtk_window_set_display (GTK_WINDOW (window),
+                             gtk_widget_get_display (do_widget));
+     g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
+
+     g_object_unref (builder);
+   }
+
+ if (!gtk_widget_get_visible (window))
+   gtk_widget_show (window);
+ else
+   gtk_window_destroy (GTK_WINDOW (window));
+
+ return window;
+}
index bcb2ebc3b558bed506a42c3fbc560efafb053f5d..89d88edaa3ba065043ac8cb1fb52f8c5f50e90c7 100644 (file)
@@ -18,6 +18,9 @@
     <file>demoimage.c</file>
     <file>demoimage.h</file>
   </gresource>
+  <gresource prefix="/constraints4">
+    <file>constraints.ui</file>
+  </gresource>
   <gresource prefix="/css_accordion">
     <file>css_accordion.css</file>
     <file>reset.css</file>
     <file>constraints.c</file>
     <file>constraints2.c</file>
     <file>constraints3.c</file>
+    <file>constraints4.c</file>
     <file>css_accordion.c</file>
     <file>css_basics.c</file>
     <file>css_blendmodes.c</file>
index 2d1efc41706bc19db91f071fea05f92abb8236cc..39070bb925d06f3a417ee27aa5795bba760f7bd4 100644 (file)
@@ -9,6 +9,7 @@ demos = files([
   'constraints.c',
   'constraints2.c',
   'constraints3.c',
+  'constraints4.c',
   'css_accordion.c',
   'css_basics.c',
   'css_blendmodes.c',